package bitOperation;

public class BitOperationApp {
    public static void main(String[] args) {
        int x = 2;

        //a=2,b=-3,c=-1,d=0

        //异或 ^
        int a = x ^ 0; //x ^ 0 = x
        int b = x ^ (~0); //x ^ ~0 = ~x     =-3
        int c = x ^ (~x); //x ^ (~x) = ~0   =-1
        int d = x ^ x; //x ^ x =0

        System.out.println(String.format("a=%d,b=%d,c=%d,d=%d,", a, b, c, d));


        int n = 3;
//        1. 将 x 最右边的 n 位清零：x & (~0 << n)
        int a1 = x & (~0 << n);
//        2. 获取 x 的第 n 位值（0 或者 1）： (x >> n) & 1
        int b1 = (x >> n) & 1;
//        3. 获取 x 的第 n 位的幂值：x & (1 << (n -1))
        int c1 = x & (1 << (n - 1));
//        4. 仅将第 n 位置为 1：x | (1 << n)
        int d1 = x | (1 << n);
//        5. 仅将第 n 位置为 0：x & (~ (1 << n))
        int f1 = x & (~(1 << n));
//        6. 将 x 最高位至第 n 位（含）清零：x & ((1 << n) - 1)
        int e1 = x & ((1 << n) - 1);
//        7. 将第 n 位至第 0 位（含）清零：x & (~ ((1 << (n + 1)) - 1))
        int g1 = x & (~((1 << (n + 1)) - 1));

        System.out.println(String.format("a1=%d,b1=%d,c1=%d,d1=%d,f1=%d,g1=%d,", a1, b1, c1, d1, g1, f1));

        x = 4;
        boolean a2 = (x & 1) == 1;
        boolean b2 = (x & 1) == 0;//偶数
        int c2 = x >> 1; // x/2
        int d2 = x & (x - 1);//清零最低位的 1
        int e2 = x & -x;//得到最低位的 1
        int f2 = x & ~x;
        System.out.println(String.format("a2=%b,b2=%b,c2=%d,d2=%d,e2=%d,f2=%d", a2, b2, c2, d2, e2, f2));


    }
}
